import {
    roleListApi,
    delRolePrivilegeApi,
    delRoleApi
} from '@/api/role'
export default {
    data() {
        return {
            // 角色列表
            rolesList: []
        }
    },
    created() {
        this.getRoleList()
    },
    methods: {
        // 打开编辑角色的对话框
        openEditDialog(role) {
            // 调子组件role-edit的open方法
            this.$refs.roleEditRef.open(role)
        },
        // 处理修改成功后的处理
        editRoleHandle(row) {
            const index = this.rolesList.findIndex(item => item.id === row.roleId)
            if (index !== -1) {
                // 以下这种修改不是响应式
                // this.rolesList[index] = row
                // 这种修改才是响应式
                this.$set(this.rolesList, index, row)
            }
        },
        // 打开添加角色的对话框
        openAddDialog() {
            // 调子组件role-add的open方法
            this.$refs.roleAddRef.open()
        },
        // 处理添加成功后的处理
        /* addRoleHandle(row) {
            // this.getRoleList()
            this.rolesList = [...this.rolesList, row]
        }, */
        // 获取角色列表
        async getRoleList() {
            const res = await roleListApi()
            if (res.meta.status !== 200) {
                return this.$message.error('获取角色列表失败')
            }
            // console.log(res.data)
            this.rolesList = res.data
        },
        // 删除角色对应的某个权限
        async delRolePrivilege(role, right) {
            // 弹框提示用户是否删除
            const confirmResult = await this.$confirm(
                '您确定要删除该权限吗?',
                '删除权限', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }
            ).catch(err => err)
            if (confirmResult === 'cancel') {
                return false
            }
            // 有子级先删除子级
            if (right.children && right.children.length > 0) {
                return this.$message.error('当前权限下面有子权限,请先删除子权限再进行删除')
            }
            // 删除
            const res = await delRolePrivilegeApi({
                roleId: role.id,
                rightId: right.id
            })
            if (res.meta.status !== 200) {
                return this.$message.error('取消权限失败')
            }
            this.$message.success('取消权限成功')

            // 不要直接请求整个角色列表数据，会造成整个列表更新，因为取消权限返回的数据就是该角色最新的权限数据，所以只需要给该角色的权限重新赋值即可
            role.children = res.data
        },
        // 删除角色
        async delRole(id) {
            const res = await delRoleApi(id)
            if (res.meta.status !== 200) {
                return this.$message.error('删除角色失败:' + res.meta.msg)
            }
            this.$message.success('删除成功')
            this.getRoleList()
        },
        // 打开分配权限的对话框
        openSetRightsDialog(roleId) {
            // 调子组件的open方法打开对话框
            this.$refs.setRightsRef.open(roleId)
        },
        setRightsHandler() {
            // 分配了权限后重新发起请求
            this.getRoleList()
        }

    }
}